package co.edu.usbcali.unidades.presentation.backingBeans;

import co.edu.usbcali.unidades.exceptions.*;
import co.edu.usbcali.unidades.modelo.*;
import co.edu.usbcali.unidades.modelo.dto.UnidadResidencialDTO;
import co.edu.usbcali.unidades.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidades.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.HtmlSelectOneRadio;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

public class UnidadResidencialView extends DataSource implements Renderable,
		DisposableBean {
	private HtmlInputText txtUnrBarrio = new HtmlInputText();
	private HtmlInputText txtUnrDireccion = new HtmlInputText();
	private HtmlInputText txtUnrNombre = new HtmlInputText();
	private HtmlInputText txtUnrTelefono = new HtmlInputText();
	private HtmlInputText txtNombre_Administrador = new HtmlInputText();
	private HtmlInputText txtEstCodigo_Estado = new HtmlInputText();
	private HtmlInputText txtUnrNit = new HtmlInputText();
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;
	private HtmlCommandButton btnCambiar;
	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<UnidadResidencial> unidadResidencial;
	private List<UnidadResidencialDTO> unidadResidencialDTO;

	// Variables para el combo de ciudades
	private HtmlSelectOneMenu cmbCiudad;
	private List<SelectItem> ciudad;
	private List<Ciudad> listaciudades;

	// Variables para ConsultarUnidadResidencial
	private HtmlInputText txtConsulta;
	List<UnidadResidencial> unidadEncontradas;
	private HtmlSelectOneRadio radioSelecionado;
	private String Nombre = new String();

	private boolean popupAdmin = false;
	private List<Persona> list_Admin = new ArrayList<Persona>();
	private HtmlInputText txtNombreAdminParcial;

	// variable que tiene el codigo del administrador seleccionado
	String codAdmin = "";

	public UnidadResidencialView() {
		super("");

	}

	public String action_clear() {

		txtUnrNit.setValue(null);
		txtUnrNit.setDisabled(false);

		txtNombre_Administrador.setValue("");
		txtNombre_Administrador.setDisabled(true);

		txtUnrNombre.setValue(null);
		txtUnrNombre.setDisabled(true);

		txtUnrTelefono.setValue(null);
		txtUnrTelefono.setDisabled(true);

		txtUnrDireccion.setValue(null);
		txtUnrDireccion.setDisabled(true);

		txtUnrBarrio.setValue(null);
		txtUnrBarrio.setDisabled(true);

		cmbCiudad.setValue("-1");
		cmbCiudad.setDisabled(true);

		txtEstCodigo_Estado.setValue(null);
		txtEstCodigo_Estado.setDisabled(true);

		btnSave.setDisabled(true);
		btnModify.setDisabled(true);
		btnCambiar.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			UnidadResidencial entity = null;

			try {
				String unrNit = new String(txtUnrNit.getValue().toString());
				entity = BusinessDelegatorView.getUnidadResidencial(unrNit);
			} catch (Exception e) {

			}

			if (entity == null) {
				cmbCiudad.setDisabled(false);

				txtUnrBarrio.setDisabled(false);

				txtUnrDireccion.setDisabled(false);

				txtUnrNombre.setDisabled(false);

				txtUnrTelefono.setDisabled(false);

				txtNombre_Administrador.setDisabled(true);
				txtNombre_Administrador.setValue("");

				txtEstCodigo_Estado.setValue("Activo");
				txtEstCodigo_Estado.setDisabled(true);

				txtUnrNit.setDisabled(false);

				btnSave.setDisabled(false);
				Nombre = "INACTIVAR";
				btnModify.setDisabled(true);
				btnCambiar.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				if (entity.getEstado().getEstCodigo().equals("2")) {
					txtUnrBarrio.setDisabled(true);
					txtUnrDireccion.setDisabled(true);
					txtUnrNombre.setDisabled(true);
					txtUnrTelefono.setDisabled(true);
					txtEstCodigo_Estado.setDisabled(true);
					txtNombre_Administrador.setDisabled(true);
					txtUnrNit.setDisabled(true);
					cmbCiudad.setDisabled(true);

					btnSave.setDisabled(true);
					Nombre = "ACTIVAR";
					btnModify.setDisabled(true);
					btnCambiar.setDisabled(false);
					btnClear.setDisabled(false);

				} else {
					txtUnrBarrio.setDisabled(false);
					txtUnrDireccion.setDisabled(false);
					txtUnrNombre.setDisabled(false);
					txtUnrTelefono.setDisabled(false);
					txtEstCodigo_Estado.setDisabled(true);
					txtNombre_Administrador.setDisabled(true);
					txtUnrNit.setDisabled(true);
					cmbCiudad.setDisabled(false);

					btnSave.setDisabled(true);
					Nombre = "INACTIVAR";
					btnModify.setDisabled(false);
					btnCambiar.setDisabled(false);
					btnClear.setDisabled(false);
				}

				txtUnrBarrio.setValue(entity.getUnrBarrio());
				txtUnrDireccion.setValue(entity.getUnrDireccion());
				txtUnrNombre.setValue(entity.getUnrNombre());
				txtUnrTelefono.setValue(entity.getUnrTelefono());
				txtNombre_Administrador.setValue(entity.getAdministrador()
						.getAdmCodigo());
				txtEstCodigo_Estado.setValue(entity.getEstado().getEstNombre());
				txtUnrNit.setValue(entity.getUnrNit());
				cmbCiudad.setValue(entity.getCiudad().getCiuCodigo());

			}
		}
	}

	public String action_save() {
		try {

			BusinessDelegatorView.saveUnidadResidencial(FacesUtils
					.checkString(txtUnrBarrio), FacesUtils
					.checkString(txtUnrDireccion), FacesUtils
					.checkString(txtUnrNit), FacesUtils
					.checkString(txtUnrNombre), FacesUtils
					.checkString(txtUnrTelefono), codAdmin, cmbCiudad
					.getValue().toString(), "1");
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {

			BusinessDelegatorView.updateUnidadResidencial(FacesUtils
					.checkString(txtUnrBarrio), FacesUtils
					.checkString(txtUnrDireccion), FacesUtils
					.checkString(txtUnrNit), FacesUtils
					.checkString(txtUnrNombre), FacesUtils
					.checkString(txtUnrTelefono), FacesUtils
					.checkString(txtNombre_Administrador), cmbCiudad.getValue()
					.toString(), "1");
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return "";
	}

	// metodo que cambia el estado de activa a inactiva...
	public String action_modifyEstado() {
		UnidadResidencial entity = null;
		try {
			String unrNit = new String(txtUnrNit.getValue().toString());
			entity = BusinessDelegatorView.getUnidadResidencial(unrNit);
			String estado = null;
			if (entity.getEstado().getEstCodigo().equals("1")) {
				estado = "2";
			} else {
				estado = "1";
			}
			BusinessDelegatorView.updateUnidadResidencial(
					entity.getUnrBarrio(), entity.getUnrDireccion(), FacesUtils
							.checkString(txtUnrNit), entity.getUnrNombre(),
					entity.getUnrTelefono(), FacesUtils
							.checkString(txtNombre_Administrador), entity
							.getCiudad().getCiuCodigo(), estado);
			FacesUtils.addInfoMessage("Se ha cambiado el estado");
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return "";
	}

	// Metodo que borra los datos y vuelve al menu...
	public String action_Volver() {
		action_clear();
		return "volver";
	}

	// metodo que llena el dataTable buscando por Nombre O por Nit.....
	public void action_ConsultarUnidadRe(ActionEvent e) {
		if(unidadEncontradas != null){
			unidadEncontradas.clear();
		}		
		try {
			unidadEncontradas = new ArrayList<UnidadResidencial>();

			if (radioSelecionado.getValue().toString().equals("0")) {
				unidadEncontradas = BusinessDelegatorView.llenarDataTableUnRes(FacesUtils.checkString(txtConsulta));
			} else {
				unidadEncontradas = BusinessDelegatorView.llenarDataTableUnRes2(FacesUtils.checkString(txtConsulta));
			}
			
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}

	public String action_modifyWitDTO(String unrBarrio, String unrDireccion,
			String unrNit, String unrNombre, String unrTelefono,
			String admCodigo_Administrador, String ciuCodigo_Ciudad,
			String estCodigo_Estado) throws Exception {
		try {
			BusinessDelegatorView
					.updateUnidadResidencial(unrBarrio, unrDireccion, unrNit,
							unrNombre, unrTelefono, admCodigo_Administrador,
							ciuCodigo_Ciudad, estCodigo_Estado);
			renderManager.getOnDemandRenderer("UnidadResidencialView")
					.requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("UnidadResidencialView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	// Get and Set....

	public List<UnidadResidencial> getUnidadResidencial() {
		if (flag) {
			try {
				unidadResidencial = BusinessDelegatorView
						.getUnidadResidencial();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return unidadResidencial;
	}

	public HtmlInputText getTxtConsulta() {
		return txtConsulta;
	}

	public void setTxtConsulta(HtmlInputText txtConsulta) {
		this.txtConsulta = txtConsulta;
	}

	public HtmlSelectOneRadio getRadioSelecionado() {
		return radioSelecionado;
	}

	public void setRadioSelecionado(HtmlSelectOneRadio radioSelecionado) {
		this.radioSelecionado = radioSelecionado;
	}

	public List<UnidadResidencial> getUnidadEncontradas() {
		return unidadEncontradas;
	}

	public void setUnidadEncontradas(List<UnidadResidencial> unidadEncontradas) {
		this.unidadEncontradas = unidadEncontradas;
	}

	public HtmlSelectOneMenu getCmbCiudad() {
		listaciudades = new ArrayList<Ciudad>();
		ciudad = new ArrayList<SelectItem>();
		try {
			listaciudades = BusinessDelegatorView.getCiudadesActivas();
			SelectItem d = new SelectItem("-1", "--Seleccione Uno--");
			ciudad.add(d);
			for (int i = 0; i < listaciudades.size(); i++) {
				SelectItem x = new SelectItem(listaciudades.get(i)
						.getCiuCodigo(), listaciudades.get(i).getCiuNombre());
				ciudad.add(x);
			}
		} catch (Exception e) {
			System.out.println("error cargando las ciudades");
		}
		return cmbCiudad;
	}

	public void setCmbCiudad(HtmlSelectOneMenu cmbCiudad) {
		this.cmbCiudad = cmbCiudad;
	}

	public List<SelectItem> getCiudad() {
		return ciudad;
	}

	public void setCiudad(List<SelectItem> ciudad) {
		this.ciudad = ciudad;
	}

	public List<Ciudad> getListaciudades() {
		return listaciudades;
	}

	public void setListaciudades(List<Ciudad> listaciudades) {
		this.listaciudades = listaciudades;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setUnidadResidencial(List<UnidadResidencial> unidadResidencial) {
		this.unidadResidencial = unidadResidencial;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberUnidadResidencial() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<UnidadResidencial> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberUnidadResidencial = 0;

		try {
			totalNumberUnidadResidencial = BusinessDelegatorView
					.findTotalNumberUnidadResidencial().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberUnidadResidencial) {
			endIndex = totalNumberUnidadResidencial;
		}

		try {
			unidadResidencial = BusinessDelegatorView
					.findPageUnidadResidencial(sortColumnName, sortAscending,
							startRow, endIndex - startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<UnidadResidencial>(totalNumberUnidadResidencial,
				startRow, unidadResidencial);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	private DataPage<UnidadResidencialDTO> getDataPageDTO(int startRow,
			int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberUnidadResidencial = 0;

		try {
			totalNumberUnidadResidencial = BusinessDelegatorView
					.findTotalNumberUnidadResidencial().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberUnidadResidencial) {
			endIndex = totalNumberUnidadResidencial;
		}

		try {
			unidadResidencial = BusinessDelegatorView
					.findPageUnidadResidencial(sortColumnName, sortAscending,
							startRow, endIndex - startRow);

			if (Utilities.validationsList(unidadResidencial)) {
				unidadResidencialDTO = new ArrayList<UnidadResidencialDTO>();

				for (UnidadResidencial unidadResidencialTmp : unidadResidencial) {
					UnidadResidencialDTO unidadResidencialDTO2 = new UnidadResidencialDTO();
					unidadResidencialDTO2.setUnrNit(unidadResidencialTmp
							.getUnrNit().toString());
					unidadResidencialDTO2.setUnrBarrio((unidadResidencialTmp
							.getUnrBarrio() != null) ? unidadResidencialTmp
							.getUnrBarrio().toString() : null);
					unidadResidencialDTO2.setUnrDireccion((unidadResidencialTmp
							.getUnrDireccion() != null) ? unidadResidencialTmp
							.getUnrDireccion().toString() : null);
					unidadResidencialDTO2.setUnrNombre((unidadResidencialTmp
							.getUnrNombre() != null) ? unidadResidencialTmp
							.getUnrNombre().toString() : null);
					unidadResidencialDTO2.setUnrTelefono((unidadResidencialTmp
							.getUnrTelefono() != null) ? unidadResidencialTmp
							.getUnrTelefono().toString() : null);
					unidadResidencialDTO2
							.setAdmCodigo_Administrador((unidadResidencialTmp
									.getAdministrador().getAdmCodigo() != null) ? unidadResidencialTmp
									.getAdministrador().getAdmCodigo()
									.toString()
									: null);
					unidadResidencialDTO2
							.setCiuCodigo_Ciudad((unidadResidencialTmp
									.getCiudad().getCiuCodigo() != null) ? unidadResidencialTmp
									.getCiudad().getCiuCodigo().toString()
									: null);
					unidadResidencialDTO2
							.setEstCodigo_Estado((unidadResidencialTmp
									.getEstado().getEstCodigo() != null) ? unidadResidencialTmp
									.getEstado().getEstCodigo().toString()
									: null);
					unidadResidencialDTO2
							.setUnidadResidencial(unidadResidencialTmp);
					unidadResidencialDTO2.setUnidadResidencialView(this);
					unidadResidencialDTO.add(unidadResidencialDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<UnidadResidencialDTO>(totalNumberUnidadResidencial,
				startRow, unidadResidencialDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	private void leaveRenderGroups() {
		if (Utilities.validationsList(unidadResidencialDTO)) {
			for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				renderManager.getOnDemandRenderer("UnidadResidencialView")
						.remove(this);
			}
		}
	}

	private void joinRenderGroups() {
		if (Utilities.validationsList(unidadResidencialDTO)) {
			for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				renderManager.getOnDemandRenderer("UnidadResidencialView").add(
						this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtUnrBarrio() {
		txtUnrBarrio.setDisabled(true);
		return txtUnrBarrio;
	}

	public void setTxtUnrBarrio(HtmlInputText txtUnrBarrio) {
		this.txtUnrBarrio = txtUnrBarrio;
	}

	public HtmlInputText getTxtUnrDireccion() {
		txtUnrDireccion.setDisabled(true);
		return txtUnrDireccion;
	}

	public void setTxtUnrDireccion(HtmlInputText txtUnrDireccion) {
		this.txtUnrDireccion = txtUnrDireccion;
	}

	public HtmlInputText getTxtUnrNombre() {
		txtUnrNombre.setDisabled(true);
		return txtUnrNombre;
	}

	public void setTxtUnrNombre(HtmlInputText txtUnrNombre) {
		this.txtUnrNombre = txtUnrNombre;
	}

	public HtmlInputText getTxtUnrTelefono() {
		txtUnrTelefono.setDisabled(true);
		return txtUnrTelefono;
	}

	public void setTxtUnrTelefono(HtmlInputText txtUnrTelefono) {
		this.txtUnrTelefono = txtUnrTelefono;
	}

	public HtmlInputText getTxtNombre_Administrador() {
		return txtNombre_Administrador;
	}

	public void setTxtNombre_Administrador(
			HtmlInputText txtAdmCodigo_Administrador) {
		this.txtNombre_Administrador = txtAdmCodigo_Administrador;
	}

	public HtmlInputText getTxtEstCodigo_Estado() {
		return txtEstCodigo_Estado;
	}

	public void setTxtEstCodigo_Estado(HtmlInputText txtEstCodigo_Estado) {
		this.txtEstCodigo_Estado = txtEstCodigo_Estado;
	}

	public HtmlInputText getTxtUnrNit() {
		return txtUnrNit;
	}

	public void setTxtUnrNit(HtmlInputText txtUnrNit) {
		this.txtUnrNit = txtUnrNit;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<UnidadResidencialDTO> getUnidadResidencialDTO() {
		return unidadResidencialDTO;
	}

	public void setUnidadResidencialDTO(
			List<UnidadResidencialDTO> unidadResidencialDTO) {
		this.unidadResidencialDTO = unidadResidencialDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	public HtmlCommandButton getBtnCambiar() {
		return btnCambiar;
	}

	public void setBtnCambiar(HtmlCommandButton btnCambiar) {
		this.btnCambiar = btnCambiar;
	}

	public String getNombre() {
		Nombre = "Activar/Inactivar";
		return Nombre;
	}

	public void setNombre(String nombre) {
		Nombre = nombre;
	}

	public boolean isPopupAdmin() {
		return popupAdmin;
	}

	public void setPopupAdmin(boolean popupAdmin) {
		this.popupAdmin = popupAdmin;
	}

	public List<Persona> getList_Admin() {
		return list_Admin;
	}

	public void setList_Admin(List<Persona> listAdmin) {
		list_Admin = listAdmin;
	}

	public HtmlInputText getTxtNombreAdminParcial() {
		return txtNombreAdminParcial;
	}

	public void setTxtNombreAdminParcial(HtmlInputText txtNombreAdminParcial) {
		this.txtNombreAdminParcial = txtNombreAdminParcial;
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<UnidadResidencial> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<UnidadResidencialDTO> fetchPage(int startRow,
				int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}

	public void action_buscarAdmin() {
		if (list_Admin != null) {
			list_Admin.clear();
		}
		action_popupVisible();
	}

	public void buscar_adminNombreParcial() {
		try {
			list_Admin = BusinessDelegatorView
					.getAdminNombreParcial(txtNombreAdminParcial.getValue()
							.toString().trim().toUpperCase());
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
	}

	public String action_cancelarBusqueda() {
		action_popupVisible();
		txtNombreAdminParcial.setValue("");
		return "";
	}

	public void action_seleccionAdmin(RowSelectorEvent e) {
		try {
			txtNombre_Administrador.setValue(list_Admin.get(e.getRow())
					.getPerPrimerNom()+" "+ list_Admin.get(e.getRow())
					.getPerPrimerApelli());
			codAdmin = BusinessDelegatorView.getCodigoAdmin(list_Admin.get(
					e.getRow()).getPerCedula());
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
			e2.printStackTrace();
		}
	}

	public void action_popupVisible() {
		popupAdmin = !popupAdmin;
	}
}